<?php

class Controller_User_Signin
{
	function execute($request)
	{

		$user = Agilet::getViewer();

		if ($user)
		{
			$request -> response = 'you have been logged before!';
			return;
		}

		if (isset($_REQUEST['redirect_uri']))
		{
			$_SESSION['login_redirect_uri'] = urldecode($_REQUEST['redirect_uri']);
		}

		$form = new Form_User_Signin();

		if ($request -> isPost() && $form -> isValid($_POST))
		{
			$data = $form -> getValues();
			$email = $data['email'];

			$result = Mongo_Collection::factory('user') -> findOne(array('email' => $email));

			if ($result)
			{
				$user = Mongo_Document::factory('user', $result);

				if ($user -> isPassword($data['password']))
				{
					$_SESSION['uid'] = $user -> _id;
					if (isset($_SESSION['login_redirect_uri']))
					{
						$url = $_SESSION['login_redirect_uri'];
						unset($_SESSION['login_redirect_uri']);
					}
					else
					{
						$url = Agilet::getUrl('/');
					}
					$user -> login_ip = $request -> getClientIp();
					$user -> login_at = time();
					$user -> save();
					
					header('location: ' . $url);
				}
				else
				{
					$form -> addError('Mật khẩu của bạn nhập không đúng.');
				}
			}
			else
			{
				$form -> addError('Địa chỉ email này không tồn tại.');

			}
		}

		$request -> response = View::render($data = array('form' => $form), 'controller/user/signin.tpl');
	}

}
